/*
  学习目标：什么是字面量类型？有什么使用场景？
  步骤：
     1. let const的区别
     2. 通过字面意思就能看懂这个值的类型
     3. 定义dispatch函数，只能接收增删改查的类型
*/
// str的类型是： string
let str = 'hello';

// str2的类型是 hello。
// hello怎么能是一个类型呢？
// 字面量类型，直接量类型。通过字面意思就能看懂这个值的类型。如：'abc' ,'todo/add', 'todo/des'
const str2 = 'hello';
const str3: 'hello' = 'hello';

// 有什么用？
// 🔔一般会配合联合类型使用

type ActionType = 'todo/add' | 'todo/des' | 'todo/updateById';
function reducer(
  state = {},
  action: {
    // 字面量
    type: ActionType;
  }
) {
  switch (action.type) {
    case 'todo/add':
      break;
    case 'todo/des':
      break;

    default:
      break;
  }
  return state;
}

reducer({}, { type: 'todo/add' });

function dispatch(action: { type: ActionType }) {
  console.log(action);
}

// 总结：
// 1. 什么是字面量-通过字面意思就能看懂这个值的类型
// 2. 字面量类型使用场景？
// 约束取值范围，明确表示一组可选值的一个，通常配合联合类型。如 贪吃蛇
